package com.beaut.project.service;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.beaut.project.dao.XMAssistMapper;
import com.beaut.project.util.StaticData;

@Transactional(rollbackFor = Exception.class)
@Service("xmAssistService")
public class XMAssistService {
	@Autowired
	private XMAssistMapper xmAssistMapper;
	/**
	 * 工单变更引发的项目状态变更
	 * 触发条件
	 * 1>工单审核通过
	 * 2>工单现场交底完成
	 * 3>工单完工
	 * @param map
	 * @return
	 */
	public String updateXMProgressStatusByGD(Map<String,Object> map){
		String gd_id=map.get("gd_id").toString();
		map.put("gd_id", gd_id);
		Map<String,Object> m1=xmAssistMapper.getXMIDByGDID(map);
		if(m1==null){
			return null;
		}
		String xmO = String.valueOf(m1.get("xm_id"));
		if("null".equals(xmO) || "".equals(xmO))
			return null;
		String xm_id=xmO.toString();
		map.put("xm_id", xm_id);
		//所有项目归集工单数量
		int countAll=xmAssistMapper.getXMGDCountAllByGDID(map);
		if(countAll==0)
		  return null;
		//项目工单集中 所有工单未开工（无现场交底数据的），属于未开工。
		int countZJAll=xmAssistMapper.getXMGDCountZJByGDID(map);
		int countJSAll=xmAssistMapper.getXMGDCountJSByGDID(map);
		if(countZJAll==countAll){
			//未开工
			map.put("xm_progress_status", StaticData.NOSTART);
		}
		else if(countZJAll>0 && countZJAll<countAll){
			//在建
			map.put("xm_progress_status", StaticData.ONLINECREATE);
		}
		else if(countJSAll==countAll){
			//完工
			map.put("xm_progress_status", StaticData.FINISH);
		}
		else{
			//在建
			map.put("xm_progress_status", StaticData.ONLINECREATE);
		}
		xmAssistMapper.updateXMProgressStatus(map);
		
		return null;
	}
	
	/**
	 * 工单处工单审核通过 引发的变更
	 * 1>工单数量变更
	 * 2>工单开工时间变更
	 * @param map
	 * @return
	 */
	public String updateXMStartTimeAndGDNumByGD(Map<String,Object> map){
		String gd_id=map.get("gd_id").toString();
		map.put("gd_id", gd_id);
		Map<String,Object> m1=xmAssistMapper.getXMIDByGDID(map);
		Object xmO=m1.get("xm_id");
		if(xmO==null)
			return null;
		String xm_id=xmO.toString();
		map.put("xm_id", xm_id);
		
		xmAssistMapper.updateXMGDSets(map);
		xmAssistMapper.updateXMStarttime(map);
		
		return null;
		
	}
	/**
	 * 工单处工单 完工 引发的变更(暂不调用)
	 * 1>工单竣工引发项目结束时间变更
	 * @param map
	 * @return
	 */
	public String updateXMEndTimeAndGDNumByGD(Map<String,Object> map){
		String gd_id=map.get("gd_id").toString();
		map.put("gd_id", gd_id);
		Map<String,Object> m1=xmAssistMapper.getXMIDByGDID(map);
		Object xmO=m1.get("xm_id");
		if(xmO==null)
			return null;
		String xm_id=xmO.toString();
		map.put("xm_id", xm_id);
		
//		xmAssistMapper.updateXMGDSets(map);
		xmAssistMapper.updateXMEndtime(map);
		
		return null;
		
	}
	/**
	 * 项目处变更引发的项目状态变更
	 * 1>项目工单移除，增加
	 * 2>项目新建
	 * @param map
	 * @return
	 */
	public String updateXMProgressStatusByXM(Map<String,Object> map){
		String xm_id=map.get("xm_id").toString();
		map.put("xm_id", xm_id);
		//所有项目归集工单数量
		int countAll=xmAssistMapper.getXMGDCountAllByGDID(map);
		if(countAll==0)
		  return null;
		//项目工单集中 所有工单未开工（无现场交底数据的），属于未开工。
		int countZJAll=xmAssistMapper.getXMGDCountZJByGDID(map);
		int countJSAll=xmAssistMapper.getXMGDCountJSByGDID(map);
		if(countZJAll==countAll){
			//未开工
			map.put("xm_progress_status", StaticData.NOSTART);
		}
		else if(countZJAll>0 && countZJAll<countAll){
			//在建
			map.put("xm_progress_status", StaticData.ONLINECREATE);
		}
		else if(countJSAll==countAll){
			//完工
			map.put("xm_progress_status", StaticData.FINISH);
		}
		else{
			//在建
			map.put("xm_progress_status", StaticData.ONLINECREATE);
		}
		xmAssistMapper.updateXMProgressStatus(map);
		return null;
	}
	
	/**
	 * 项目处变更引发的项目归集工单数量与工单开始时间变更
	 * 1>项目工单移除，增加
	 * 2>项目新建
	 * 3>工单新建时选择了项目
	 * @param map
	 * @return
	 */
	public String updateStartTimeAndGDSetByXM(Map<String,Object> map){
		String xm_id=map.get("xm_id").toString();
		map.put("xm_id", xm_id);
		xmAssistMapper.updateXMGDSets(map);
		xmAssistMapper.updateXMStarttime(map);
		if(map.get("purchase_in_invoice") == null){
			map.put("purchase_in_invoice", 0);
		}
		xmAssistMapper.addXMPurchaseInVoice(map);
		//更新项目状态
		this.updateXMProgressStatusByXM(map);
//		int j=0;
//		int i=9/j;
		return null;
	}
	/**
	 * 项目处验收或结算收入发起引发 项目完工时间变更
	 * 1>
	 * @param map
	 * @return
	 */
	public String updatEndTimeByXM(Map<String,Object> map){
		String xm_id=map.get("xm_id").toString();
		map.put("xm_id", xm_id);
//		xmAssistMapper.updateXMGDSets(map);
		xmAssistMapper.updateXMEndtime(map);
		return null;
	}

}
